package com.warm.select.api;

import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * 缓存工具类
 *
 * @author warm
 */
public interface RedisCache {

    /**
     * 缓存基本的对象，Integer、String、实体类等
     *
     * @param key   缓存的键值
     * @param value 缓存的值
     */
    <T> void setCacheObject(final String key, final T value);

    /**
     * 缓存基本的对象，Integer、String、实体类等
     *
     * @param key     缓存的键值
     * @param value   缓存的值
     * @param timeout 时间 秒
     */
    <T> void setCacheObject(final String key, final T value, final Integer timeout);

    /**
     * 判断 key是否存在
     *
     * @param key 键
     * @return true 存在 false不存在
     */
    Boolean hasKey(String key);

    /**
     * 获得缓存的基本对象。
     *
     * @param key 缓存键值
     * @return 缓存键值对应的数据
     */
    <T> T getCacheObject(final String key, Class<T> tClass);

    /**
     * 获得缓存的基本对象列表。
     *
     * @param key 缓存键值
     * @return 缓存键值对应的数据
     */
    <T> List<T> getCacheObjectList(final String key, Class<T> tClass);

    /**
     * 删除单个对象
     *
     * @param key
     */
    void deleteObject(final String key);

    /**
     * 删除集合对象
     *
     * @param collection 多个对象
     * @return
     */
    void deleteObject(final Collection<String> collection);

    /**
     * 获得缓存的基本对象列表
     *
     * @param pattern 字符串前缀
     * @return 对象列表
     */
    Set<String> keys(final String pattern);

}